/*
 * ProgressStatus.h
 *
 *  Created on: Dec 25, 2014
 *      Authors: Avihay Avitan & Stefan Farcas
 */

#ifndef PROGRESSSTATUS_H_
#define PROGRESSSTATUS_H_
#include <string>
#include "AllUtils.h"
#include "StatusContentConstants.h"
using namespace std;
namespace ProgressStatusSpace {

/**
 * ProgressStatusType - an enum class declaring the logging level types
 */
enum class ProgressStatusType {
    ERR = 0,
    WRN = 1,
    INF = 2
};

/*
 * ProgressStatus is a class that define a status in the process of the GSPass system it contains information about time of the status, the class that it comes from, including the function and content.
 * Additionally, it provides information about is the status was printed to console or if it is directly related to a specific critical pass
 */
class ProgressStatus {
public:
	ProgressStatus();
	ProgressStatus(ProgressStatusType type ,string sclass , string function , string content, bool fromConsule, bool passRelated);
	ProgressStatus(long timeStampLongSec,long timeStampLongNanos,ProgressStatusType type ,string sclass , string function , string content, bool fromConsule, bool passRelated);
	virtual ~ProgressStatus();
	void setProgressStatus(long timeStampLongSec,long timeStampLongNanos,ProgressStatusType type ,string sclass , string function , string content, bool fromConsule, bool passRelated);
	ProgressStatusType getProgressStatusType();
	long getTimeStampLongSec();
	long getTimeStampLongNanos();
	string getTimeStampString();
	string getClass();
	string getFunction();
	string getContent();
	bool isFromConsole();
	bool isPassRelated();
	void setIsFromConsole(bool isFromConsole);
	bool getIsToPublish();
	void setIsToPublish(bool isToPublish);

private:
	ProgressStatusType type;
	long timeStampLongSec;
	long timeStampLongNanos;
	string timeStampString ;
	string sclass;
	string function;
	string content;
	bool fromConsule;
	bool passRelated;
	bool isToPublish;
};

} /* namespace ProgressStatusSpace */

#endif /* PROGRESSSTATUS_H_ */
